library(tidyverse)
library(plotly)
library(crosstalk)
sw_eye <- starwars %>% 
  filter(eye_color == str_extract(eye_color, "\\w+")) %>% 
  filter(eye_color != "unknown", eye_color != "hazel", eye_color != "white") %>% 
  filter(mass < 200) %>% 
  mutate(eye_color = fct_infreq(eye_color)) %>% 
  mutate(species = fct_rev(fct_infreq(species)))
sw_eye_levels <- levels(sw_eye$eye_color)
#shared_sw_eye <- SharedData$new(sw_eye)
vertbar <- ggplotly(sw_eye %>% 
  ggplot(aes(eye_color)) +
  geom_bar())
scatter <- plot_ly(data = sw_eye, x = ~mass, y = ~height, 
        color = ~eye_color, colors = sw_eye_levels,
        text = ~name, mode = "markers")   %>% 
  layout(title = "\nStarWars Character Eye Color", height = 400)
Specifying width/height in layout() is now deprecated.
Please specify in ggplotly() or plot_ly()
horbar <- ggplotly(ggplot(sw_eye, aes(x = species)) + geom_bar() + coord_flip())
subplot(vertbar, scatter)
No trace type specified:
  Based on info supplied, a 'scatter' trace seems appropriate.
  Read more about this trace type -> https://plot.ly/r/reference/#scatter
Can only have one: config

subplot(scatter, horbar, nrows = 2)
No trace type specified:
  Based on info supplied, a 'scatter' trace seems appropriate.
  Read more about this trace type -> https://plot.ly/r/reference/#scatter
Can only have one: config
LS0tDQp0aXRsZTogInNoYXJlZF9ub3QiDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQpgYGB7cn0NCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShwbG90bHkpDQpsaWJyYXJ5KGNyb3NzdGFsaykNCmBgYA0KDQoNCmBgYHtyfQ0Kc3dfZXllIDwtIHN0YXJ3YXJzICU+JSANCiAgZmlsdGVyKGV5ZV9jb2xvciA9PSBzdHJfZXh0cmFjdChleWVfY29sb3IsICJcXHcrIikpICU+JSANCiAgZmlsdGVyKGV5ZV9jb2xvciAhPSAidW5rbm93biIsIGV5ZV9jb2xvciAhPSAiaGF6ZWwiLCBleWVfY29sb3IgIT0gIndoaXRlIikgJT4lIA0KICBmaWx0ZXIobWFzcyA8IDIwMCkgJT4lIA0KICBtdXRhdGUoZXllX2NvbG9yID0gZmN0X2luZnJlcShleWVfY29sb3IpKSAlPiUgDQogIG11dGF0ZShzcGVjaWVzID0gZmN0X3JldihmY3RfaW5mcmVxKHNwZWNpZXMpKSkNCg0Kc3dfZXllX2xldmVscyA8LSBsZXZlbHMoc3dfZXllJGV5ZV9jb2xvcikNCg0KI3NoYXJlZF9zd19leWUgPC0gU2hhcmVkRGF0YSRuZXcoc3dfZXllKQ0KYGBgDQoNCg0KDQpgYGB7cn0NCnZlcnRiYXIgPC0gZ2dwbG90bHkoc3dfZXllICU+JSANCiAgZ2dwbG90KGFlcyhleWVfY29sb3IpKSArDQogIGdlb21fYmFyKCkpDQoNCnNjYXR0ZXIgPC0gcGxvdF9seShkYXRhID0gc3dfZXllLCB4ID0gfm1hc3MsIHkgPSB+aGVpZ2h0LCANCiAgICAgICAgY29sb3IgPSB+ZXllX2NvbG9yLCBjb2xvcnMgPSBzd19leWVfbGV2ZWxzLA0KICAgICAgICB0ZXh0ID0gfm5hbWUsIG1vZGUgPSAibWFya2VycyIpICAgJT4lIA0KICBsYXlvdXQodGl0bGUgPSAiXG5TdGFyV2FycyBDaGFyYWN0ZXIgRXllIENvbG9yIiwgaGVpZ2h0ID0gNDAwKQ0KDQpob3JiYXIgPC0gZ2dwbG90bHkoZ2dwbG90KHN3X2V5ZSwgYWVzKHggPSBzcGVjaWVzKSkgKyBnZW9tX2JhcigpICsgY29vcmRfZmxpcCgpKQ0KYGBgDQoNCg0KDQpgYGB7cn0NCnN1YnBsb3QodmVydGJhciwgc2NhdHRlcikNCnN1YnBsb3Qoc2NhdHRlciwgaG9yYmFyLCBucm93cyA9IDIpDQpgYGANCg0K